/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package imp.gestores;

import java.util.List;


import javax.faces.application.FacesMessage;

import javax.faces.context.FacesContext;

import imp.clases.*;

import imp.DAO.*;
import imp.menu.BeanUtil;
import javax.faces.component.UIComponent;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.validator.ValidatorException;
import org.ajax4jsf.component.html.HtmlAjaxCommandButton;
import org.richfaces.component.html.HtmlDataTable;
import org.springframework.beans.BeanUtils;
/**
 *
 * @author Alvaro Uyaguari
 */
public class GestorIndicadores extends BeanUtil{

        private Indicador currentIndicador;
        private HtmlDataTable tablaIndicadores;
        //private ListDataModel listado;
        private List<Indicador> listadoActual;
        private String reRender;
        private String focus;



        //Atributos del usados en el buscador:
        private String filtroBusqueda;
        private String valorBuscar;

        private DAO dao = (DAO)ServiceFinder.findBean("SpringHibernateDao");
        public GestorIndicadores(){
                this.tablaIndicadores = new HtmlDataTable();
		listar();
	}



     public void seleccionarIndicador(ActionEvent evento) {
         //currentIndicador = (Indicador)tablaIndicadores.getRowData();
        Integer indice = (Integer) this.tablaIndicadores.getRowKey();
        BeanUtils.copyProperties(this.listadoActual.get(indice), this.currentIndicador);

        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setReRender(this.reRender);
        boton.setOncomplete("Richfaces.hideModalPanel('panelIndicador')");

    }

    public void seleccionarIndicadorRRHH(ActionEvent evento) {
         //currentIndicador = (Indicador)tablaIndicadores.getRowData();
        Integer indice = (Integer) this.tablaIndicadores.getRowKey();
        BeanUtils.copyProperties(this.listadoActual.get(indice), this.currentIndicador);

        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setReRender(this.reRender);
        boton.setOncomplete("Richfaces.hideModalPanel('panelBuscarIndicador')");

    }

    public String nuevo() {
        try {
            this.currentIndicador = new Indicador();
            return "indicador";

        } catch (Throwable ex) {
            this.MostrarMensaje(ex.getMessage());


        }
        return null;
    }

    public String cerrar() {
    return "principal";
    }
    public String editar()
	{
		currentIndicador = (Indicador)tablaIndicadores.getRowData();
		return "indicador";
	}
    public String listar() {
        String where = "";
        //String where = "where c.eliminado=0";

        try {
                listadoActual = dao.find(Indicador.class);

        } catch (Exception e) {
            this.MostrarMensaje(e.getMessage());
        }
        return null;
}
    public List filtrar(String where) {
        List l=null;
        try{
                //Session session = HibernateUtil.currentSession();

                //Query q = session.createQuery("from geo.clases.Orden c  " + where);


                //l = q.list();
                l = dao.find(where);
                listadoActual=l;
        } catch (Throwable ex) {
                ex.printStackTrace();
        } finally {
                //finalizar
        }

        return l;
}
    private void MostrarMensaje(String mensaje){
        FacesContext context = FacesContext.getCurrentInstance();
        String msg = "Error: " + mensaje;
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,msg, msg));
    }
    public String grabar()
	{

		try
		{
			dao.persist(currentIndicador);

		}
		catch (Throwable ex)
		{
			ex.printStackTrace();
			FacesContext context = FacesContext.getCurrentInstance();
			String msg = "No se pudo actualizar la oferta. " + ex.getMessage();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg,msg));
			return null;
		}
		finally {//Finalizar

                }
		listar();
		return "indicadores";
	}
    public String eliminar(){
                this.currentIndicador = (Indicador) tablaIndicadores.getRowData();

		try
		{
			//session.delete(currentOrden);
			//tx.commit();
                    dao.delete(currentIndicador);
		}
		catch (Throwable ex)
		{
			ex.printStackTrace();
			//tx.rollback();
			FacesContext context = FacesContext.getCurrentInstance();
			String msg = "No se pudo actualizar la oferta. " + ex.getMessage();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg,msg));
			return null;
		}
		finally {//HibernateUtil.closeSession();

                }
		listar();

		return null;
	}



    public Indicador getCurrentIndicador() {
        return currentIndicador;
    }

    public String getFiltroBusqueda() {
        return filtroBusqueda;
    }

    public String getFocus() {
        return focus;
    }



    public List<Indicador> getListadoActual() {

        return listadoActual;
    }



    public String getReRender() {
        return reRender;
    }

    public HtmlDataTable getTablaIndicadores() {
        return tablaIndicadores;
    }



    public void setCurrentIndicador(Indicador currentIndicador) {
        this.currentIndicador = currentIndicador;
    }

    public void setFiltroBusqueda(String filtroBusqueda) {
        this.filtroBusqueda = filtroBusqueda;
    }

    public void setFocus(String focus) {
        this.focus = focus;
    }


    public void setListadoActual(List<Indicador> listadoActual) {
        this.listadoActual = listadoActual;
    }



    public void setReRender(String reRender) {
        this.reRender = reRender;
    }

    public void setTablaIndicadores(HtmlDataTable tablaIndicadores) {
        this.tablaIndicadores = tablaIndicadores;
    }

    @Override
    protected void buscar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

        public String getValorBuscar() {
        return valorBuscar;
    }

    public void setValorBuscar(String valorBuscar) {
        this.valorBuscar = valorBuscar;
    }

public void buscarValor(ValueChangeEvent evento) {
        FacesContext context = FacesContext.getCurrentInstance();
        valorBuscar = evento.getNewValue().toString();
        //Realizo la busqueda:
        if ("codigo".equalsIgnoreCase(this.filtroBusqueda)) {
            this.filtrar("select prs from Indicador as prs where prs.codigo=" + valorBuscar + "");

            return;
        }
        if ("descripcion".equalsIgnoreCase(this.filtroBusqueda)) {
            this.filtrar("select prs from Indicador as prs where upper(prs.nombre) like upper('%" + valorBuscar + "%')");

            return;
        }


    }

    


}